| 簡短描述 | |
|---|---|
|
檔案: |
|
|
預設平台: |
|
|
簡短說明 使用 JPEG_Encoder_Gray 運算子以提升 JPEG 壓縮的頻寬。 |
|
此範例旨在說明 JPEG_Encoder_Gray 在 JPEG 壓縮時所面臨的頻寬限制。 為達成此目標,採用了多個並行運作的運算子。針對marathon mE5 VCL 平台,共有兩個範例。 JPEG_Gray 範例使用四個並行運作的運算子,來編碼一張完整配置的灰階影像。 JPEG_Color 範例則使用六個運算元,對來自拜耳相機的影像進行編碼,並針對色度成分在水平與垂直 方向進行子採樣。
此設計使用四個 JPEG_Encoder_Gray 運算子,以最高 1200MP/s 的頻寬對影像進行編碼(這對於
全規格配置的 CameraLink 攝影機而言已綽綽有餘)。
JPEG 資料流基於運行長度編碼。每個資料流以DC 部分開頭,隨後跟隨多個 AC 組件。
因此,若要將影像分割給多個編碼器處理,則需在特定間隔重新啟動編碼。在
JPEG 格式中,可透過重新啟動標記來實現此功能。
因此,VisualApplets 設計將影像分割為八行一組的區塊(即一個最小編碼單位(MCU)的行數)。
在每條 MCU 行的結尾,都會插入一個重新啟動標記。
在圖276中,您可以看到該小程式的整體樣貌。在壓縮方面,有三個值得注意的分層方塊(JPEGBlockSorter8x8、 SplitImage 以及 SYNC)。
在 JPEGBlockSorter8x8(圖277)中,八行資料會被重新整理為 8x8 像素的區塊。這些區塊會依序傳送。
為了方便處理影像,其尺寸會保持不變。
SplitImage(圖279)將影像儲存至 DRAM,並重新排列行,使四條連續的行分別對應至四個獨立的 MCU 區塊行。
藉此方式,MCU 區塊行的資料流可被拆分,並傳送至 4 個獨立的編碼器。
SYNC 會彙整已編碼的資料流,將末尾的資訊標籤替換為重新開始標記,並將所有行串接成一張影像。
前八個像素會被彙整為一個「區塊像素」。在「排序框」中,這些「區塊像素」的排列方式是讓 每行中的區塊像素依序緊接在後,如圖278所示
該 SplitImage(圖279)方塊會重新排列來自 JPEGBlockSorter8x8(圖277)中的行重新排列成一種方案,
其中總是將四個區塊分開傳輸。每個區塊由八行組成。此程序會重複執行,直到
所有行皆已傳輸完畢。
在 Split 方塊中,影像會被分割成四張影像。此操作是透過移除各連結中不屬於該影像的所有行來實現。
這些子影像會被分割
為高度為八的影像,以便小程式能在八行結束處插入重啟間隔。
該 SYNC 方塊會將每個 JPEG_Converter 的資料流合併為一張影像。此過程分為三個步驟。首先,會標記最後的位元組(0xFFD9 — 影像結束標記 + 來自操作者的資訊)以供移除。 此步驟在 Box RemoveFillByte中完成(圖280)。 其次,在各區塊之間加入重啟標記。JPEG 串流中的重啟標記採用「0xFFDx」結構, 其中 x 為 0 至 7 之間的值,採用環形循環計數方式。此步驟在 Box RestartMarker方塊中執行(圖 277)。 第三,移除未使用的位元組。(圖277)中進行。 第三步:移除未使用字節。
對於從此小程式取得影像資料時,您需要在標頭中加入重新啟動資訊。方法是將 DRI 標記 (0xFF DD) 加入標頭中。
此範例基本上與灰色範例相同。差異如下:
1. 來自拜耳轉換的 RGB 資料被轉換為 YCrCb 色彩空間。
2. Cr 和 Cb 成分經過次採樣。
3. 分離後的影像被緩存於獨立的緩衝區中。 為了將行資料分流至六個轉換器,同時避免插入
虛線,需要一個獨立的分流緩衝區。
4. 同步訊號需要分割為三張高度各異的影像。
若要在子採樣影像中使用重新啟動間隔,則需將採樣因子調整為通道中 MCU 的最小數量 。我們採用 4:2:0 子採樣。 這表示 Cr 和 Cb 影像中的線寬僅為原來的二分之一。因此,為了讓所有重新啟動標記都位於相同位置, Y 影像中的線條也必須被分成兩半。

上一頁

